#include <stdio.h>
#include <pthread.h>
#include <semaphore.h>
#include <sys/time.h>
#include <unistd.h> 
#include <fcntl.h>
#include <ctype.h>
#include <string.h>

pthread_mutex_t mutex;
pthread_cond_t condition;
char input[100];
int hasInput = 0;

void* secondary_thread_func(void* arg) {
    while (1) {
        pthread_mutex_lock(&mutex);
        if (!hasInput) {
            // 执行副线程的任务
            printf("副线程\n");
            usleep(10);
            
            // 唤醒等待的主线程
            pthread_cond_signal(&condition);
        } else {
            // 等待条件变量
            pthread_cond_wait(&condition, &mutex);
        }
        pthread_mutex_unlock(&mutex);
    }
}

int main() {
    pthread_t secondary_thread;

    // 初始化互斥锁和条件变量
    pthread_mutex_init(&mutex, NULL);
    pthread_cond_init(&condition, NULL);

    // 创建副线程
    pthread_create(&secondary_thread, NULL, secondary_thread_func, NULL);

    // 主线程的输入监听
    while (1) {
        printf("主线程\n");
        char temp_input[100];

        // 非阻塞地读取用户输入
        if (fgets(temp_input, sizeof(temp_input), stdin)) {
            pthread_mutex_lock(&mutex);
            
            // 处理输入的数据
            strcpy(input, temp_input);
            hasInput = 1;

            // 唤醒等待的副线程
            pthread_cond_signal(&condition);

            // 等待副线程处理完毕
            while (hasInput) {
                pthread_cond_wait(&condition, &mutex);
            }

            pthread_mutex_unlock(&mutex);
        } else {
            // 执行主线程的任务
            printf("Main Thread is running\n");
            usleep(10);
        }
    }

    // 销毁互斥锁和条件变量
    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&condition);

    return 0;
}
